{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/wangdong/anaconda2/lib/python2.7/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-2-f5b937bed0fa>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From /home/wangdong/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From /home/wangdong/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From /home/wangdong/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From /home/wangdong/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.one_hot on tensors.\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From /home/wangdong/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: __init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784)\n",
      "(55000, 10)\n",
      "(5000, 784)\n",
      "(5000, 10)\n",
      "(10000, 784)\n",
      "(10000, 10)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\", one_hot = True)\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4 , 4, idx + 1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(np.argmax(mnist.train.labels[idx])))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28, 28)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784], name='x')\n",
    "y = tf.placeholder(\"float\", [None, 10], name='y')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x_image = tf.reshape(x, [-1, 28, 28, 1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "with tf.name_scope('conv1'):\n",
    "    C1 = tf.contrib.slim.conv2d(\n",
    "          x_image, 6, [5, 5], padding='VALID', activation_fn = tf.nn.relu)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "with tf.name_scope('pool1'):\n",
    "    S2 = tf.contrib.slim.max_pool2d(C1, [2, 2], stride=[2, 2], padding='VALID')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "with tf.name_scope('conv2'):\n",
    "    C3 = tf.contrib.slim.conv2d(\n",
    "          S2, 16, [5, 5], padding='VALID', activation_fn = tf.nn.relu)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "with tf.name_scope('pool2'):\n",
    "    S4 = tf.contrib.slim.max_pool2d(C3, [2, 2], stride=[2, 2], padding='VALID')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "with tf.name_scope('fc1'):\n",
    "    S4_flat = tf.contrib.slim.flatten(S4)\n",
    "    C5 = tf.contrib.slim.fully_connected(S4_flat, 120, activation_fn=tf.nn.relu)\n",
    "    \n",
    "with tf.name_scope('fc2'):\n",
    "    F6 = tf.contrib.slim.fully_connected(C5, 84, activation_fn=tf.nn.relu)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "with tf.name_scope('dropout'):\n",
    "    keep_prob = tf.placeholder(name='keep_prob', dtype=tf.float32)\n",
    "    F6_drop = tf.nn.dropout(F6, keep_prob)\n",
    "    \n",
    "with tf.name_scope('fc3'):\n",
    "    logits = tf.contrib.slim.fully_connected(F6_drop, 10, activation_fn=None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-12-565b0e9c6a56>:2: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "\n",
      "Future major versions of TensorFlow will allow gradients to flow\n",
      "into the labels input on backprop by default.\n",
      "\n",
      "See `tf.nn.softmax_cross_entropy_with_logits_v2`.\n",
      "\n",
      "Conv/weights:0\n",
      "INFO:tensorflow:Summary name Conv/weights:0 is illegal; using Conv/weights_0 instead.\n",
      "Conv/biases:0\n",
      "INFO:tensorflow:Summary name Conv/biases:0 is illegal; using Conv/biases_0 instead.\n",
      "Conv_1/weights:0\n",
      "INFO:tensorflow:Summary name Conv_1/weights:0 is illegal; using Conv_1/weights_0 instead.\n",
      "Conv_1/biases:0\n",
      "INFO:tensorflow:Summary name Conv_1/biases:0 is illegal; using Conv_1/biases_0 instead.\n",
      "fully_connected/weights:0\n",
      "INFO:tensorflow:Summary name fully_connected/weights:0 is illegal; using fully_connected/weights_0 instead.\n",
      "fully_connected/biases:0\n",
      "INFO:tensorflow:Summary name fully_connected/biases:0 is illegal; using fully_connected/biases_0 instead.\n",
      "fully_connected_1/weights:0\n",
      "INFO:tensorflow:Summary name fully_connected_1/weights:0 is illegal; using fully_connected_1/weights_0 instead.\n",
      "fully_connected_1/biases:0\n",
      "INFO:tensorflow:Summary name fully_connected_1/biases:0 is illegal; using fully_connected_1/biases_0 instead.\n",
      "fully_connected_2/weights:0\n",
      "INFO:tensorflow:Summary name fully_connected_2/weights:0 is illegal; using fully_connected_2/weights_0 instead.\n",
      "fully_connected_2/biases:0\n",
      "INFO:tensorflow:Summary name fully_connected_2/biases:0 is illegal; using fully_connected_2/biases_0 instead.\n"
     ]
    }
   ],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "       tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "l2_loss = tf.add_n([\n",
    "    tf.nn.l2_loss(w)\n",
    "    for w in tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)\n",
    "])\n",
    "\n",
    "for w in tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES):\n",
    "    print(w.name)\n",
    "    tf.summary.histogram(w.name, w)\n",
    "    \n",
    "total_loss = cross_entropy_loss + 7e-5 * l2_loss\n",
    "tf.summary.scalar('cross_entropy_loss', cross_entropy_loss)\n",
    "tf.summary.scalar('l2_loss', l2_loss)\n",
    "tf.summary.scalar('total_loss', total_loss)\n",
    "\n",
    "optimizer =  tf.train.GradientDescentOptimizer(\n",
    "              learning_rate=0.3).minimize(total_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(y, 1), tf.argmax(logits, 1))\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch_size = 100\n",
    "training_step = 1100\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.27624, the validation accuracy is 0.9368\n",
      "after 200 training steps, the loss is 0.169548, the validation accuracy is 0.957\n",
      "after 300 training steps, the loss is 0.131057, the validation accuracy is 0.9654\n",
      "after 400 training steps, the loss is 0.205627, the validation accuracy is 0.972\n",
      "after 500 training steps, the loss is 0.0193506, the validation accuracy is 0.9662\n",
      "after 600 training steps, the loss is 0.100615, the validation accuracy is 0.9764\n",
      "after 700 training steps, the loss is 0.147611, the validation accuracy is 0.9778\n",
      "after 800 training steps, the loss is 0.137244, the validation accuracy is 0.9816\n",
      "after 900 training steps, the loss is 0.0539297, the validation accuracy is 0.9772\n",
      "after 1000 training steps, the loss is 0.265533, the validation accuracy is 0.9822\n",
      "the training is finish!\n",
      "('the test accuracy is: ', 0.9821)\n"
     ]
    }
   ],
   "source": [
    "merged = tf.summary.merge_all()\n",
    "with tf.Session() as sess:\n",
    "    writer = tf.summary.FileWriter(\"logs/\", sess.graph)\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "    \n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "        keep_prob: 1.0\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels, keep_prob: 1.0}\n",
    "    \n",
    "    for i in range(training_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss, rs = sess.run(\n",
    "        [optimizer, cross_entropy_loss, merged],\n",
    "            feed_dict = {\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                keep_prob: 0.6\n",
    "            })\n",
    "        writer.add_summary(rs, i)\n",
    "        \n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i>0 and i%100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                   %(i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "            \n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuracy is: \", acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-1000\n",
      "1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "        [pred, accuracy],\n",
    "        feed_dict={\n",
    "            x: mnist.test.images[:16],\n",
    "            y: mnist.test.labels[:16],\n",
    "            keep_prob: 1.0\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8,8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx+1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}] - [{:.1f}%]'.format(\n",
    "                np.argmax(mnist.test.labels[idx]), order, prob*100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "            \n",
    "    else: \n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
